package cn.tedu.code;//本类为测试构造方法，没有【封装】和【get/set方法】
/**练习：[构造方法创建对象]/[构造方法赋值]
特点:方法名与类名相同,且没有返回值类型
执行时机:创建对象时立即执行
默认会创建无参构造,但是,如果自定义了含参构造,默认的无参构造会被覆盖,注意要手动添加哦
 */
public class TestConstructor {
    public static void main(String[] args) {
        //创建第一个对象
          Person p= new Person();//无参的对象-----无参构造:调用无参构造方法并打印出一句话
        System.out.println(p.name);//null
        System.out.println(p.age);//0
        System.out.println(p.sex);//null
        p.paly();//哎，就是玩儿

        System.out.println("------------------------------");
        //创建第二个对象
        Person p2 = new Person("小李");//当每创建一次new（实例化）都会自动调用构造方法，并打印一次构造方法里面的输出语句
        System.out.println(p2.name);//小李
        System.out.println(p2.age);//0
        System.out.println(p2.sex);//null
         p2.paly();//哎，就是玩儿
        System.out.println("------------------------------");
         //创建第三个对象
        Person p3 = new Person("小王",18,"男");
        System.out.println(p3.name);
        System.out.println(p3.age);
        System.out.println(p3.sex);
        p3.paly();

    }
}

//创建一个Person类。
class Person{
//成员变量==属性；调用构造方法不用封装
    String name;
    int age ;
    String sex;


    public Person() {
        System.out.println("这是没有参数的无参构造");
    }
    //可以创建一个需要的有1个参数的构造方法
    //当只提供了含参构造,默认的无参构造会被覆盖,所以在创建重载的构造方法时,一定注意手动添加无参构造*/
    public Person(String s){   //手动添加
        this.name=s;
        System.out.println("这是有一个参数的构造方法");

    }
    public Person(String n, int a, String s) {
        this.name = n;//n是局部变量,name是成员变量,把用户传的参数值n赋值给成员变量name
        this.age = a;//
        this.sex = s;
        System.out.println("这是有全部参数的构造方法");
    }
    //行为方法
    public void paly(){ //play方法
        System.out.println("哎，就是玩儿");
    }

}
/**3.构造方法也存在重载的现象:方法的重载:在同一个类中,方法名相同且参数列表不同的现象*/
//普通方法的定义:修饰符 返回值类型 方法名 (参数列表){ 方法体  }
//构造方法的定义:修饰符 方法名 (参数列表){ 方法体  } --方法名与类名一致
/**特点:1)方法名与类名相同,且没有返回值类型
        2)执行时机:创建对象时立即执行
        3)默认会创建无参构造,但是,如果自定义了含参构造,默认的无参构造会被覆盖,注意要手动添加哦
 */
